Visualizacion de informacion con Pandas

En este ejercicio se demostrara como se puede visualizar informacion mediante la libreria Pandas

Importar librerias


In [1]:
import numpy as np
import pandas as pd
%matplotlib inline

La informacion

Para el ejercicio se creo informacion ficticia la cual se encuentra en la carpeta data con los nombres df1, df2 y df3


In [2]:
df1 = pd.read_csv('../data/df1',index_col=0)
df2 = pd.read_csv('../data/df2')

Hojas de estilo

Matplotlib tiene Hojas de estilo que se pueden utilizar para crear graficas. Estas hojas de estilo incluyen plot_bmh, plot_fivethirtyeight, plot_ggplot y mas. Basicamente crean distintas reglas de estilo que se pueden aplicar facilmente.

Antes de utilizar plt.style.use() tus graficas se pueden ver como la siguiente:


In [3]:
df1['A'].hist()


Out[3]:
<matplotlib.axes._subplots.AxesSubplot at 0x10cefadd8>

Utilizando estilos:


In [4]:
import matplotlib.pyplot as plt
plt.style.use('ggplot')

Ahora tu grafica se visulizara de la siguiente manera:


In [5]:
df1['A'].hist()


Out[5]:
<matplotlib.axes._subplots.AxesSubplot at 0x10d04b5f8>

In [6]:
plt.style.use('bmh')
df1['A'].hist()


Out[6]:
<matplotlib.axes._subplots.AxesSubplot at 0x10f7c51d0>

In [7]:
plt.style.use('dark_background')
df1['A'].hist()


Out[7]:
<matplotlib.axes._subplots.AxesSubplot at 0x10f923cf8>

In [8]:
plt.style.use('fivethirtyeight')
df1['A'].hist()


Out[8]:
<matplotlib.axes._subplots.AxesSubplot at 0x10cfc2780>

In [9]:
plt.style.use('ggplot')

Por lo pronto utilizaremos el estilo ggplot

Tipos de grafica

Existen varios tipos de graficas que se integran en pandas, la mayoria de ellas para demostrar datos estadisticos:

  • df.plot.area
  • df.plot.barh
  • df.plot.density
  • df.plot.hist
  • df.plot.line
  • df.plot.scatter
  • df.plot.bar
  • df.plot.box
  • df.plot.hexbin
  • df.plot.kde
  • df.plot.pie

A su vez puedes mandar llamar df.plot(kind='hist') o remplazar el argumento de kind por cualquiera de la siguientes claves (ej. 'box','barh', etc..)


Area


In [10]:
df2.plot.area(alpha=0.4)


Out[10]:
<matplotlib.axes._subplots.AxesSubplot at 0x10fb58320>

Graficas de barras


In [14]:
df2.head()


Out[14]:
a b c d
0 0.039762 0.218517 0.103423 0.957904
1 0.937288 0.041567 0.899125 0.977680
2 0.780504 0.008948 0.557808 0.797510
3 0.672717 0.247870 0.264071 0.444358
4 0.053829 0.520124 0.552264 0.190008

In [12]:
df2.plot.bar()


Out[12]:
<matplotlib.axes._subplots.AxesSubplot at 0x10fcb9358>

In [13]:
df2.plot.bar(stacked=True)


Out[13]:
<matplotlib.axes._subplots.AxesSubplot at 0x10ff3c9e8>

Histogramas


In [82]:
df1['A'].plot.hist(bins=50)


Out[82]:
<matplotlib.axes._subplots.AxesSubplot at 0x12685e9b0>

Graficas de lineas


In [15]:
df1.plot.line(x=df1.index,y='B',figsize=(12,3),lw=1)


Out[15]:
<matplotlib.axes._subplots.AxesSubplot at 0x110080630>

Graficas de puntos


In [16]:
df1.plot.scatter(x='A',y='B')


Out[16]:
<matplotlib.axes._subplots.AxesSubplot at 0x1102b9e10>

Se puede utilizar c para cambiar el color a desplegar y cmap para modificar el rango de colores a desplegar Para consultar todos los rangos de colores puedes consultar: http://matplotlib.org/users/colormaps.html


In [17]:
df1.plot.scatter(x='A',y='B',c='C',cmap='coolwarm')


Out[17]:
<matplotlib.axes._subplots.AxesSubplot at 0x110365be0>

Tambien se puede utilizar s para indicar el tamanio de alguna otra columna. El parametro s debe de ser un arreglo y no solo el nombre de la columna:


In [23]:
df1.plot.scatter(x='A',y='B',s=df1['C']*100)


/Users/jorgemauricio/anaconda/lib/python3.6/site-packages/matplotlib/collections.py:877: RuntimeWarning: invalid value encountered in sqrt
  scale = np.sqrt(self._sizes) * dpi / 72.0 * self._factor
Out[23]:
<matplotlib.axes._subplots.AxesSubplot at 0x110c4de80>

Graficas de caja


In [32]:
df2.plot.box() # Tambien puedes incluir el argumento by= para agrupar la informacion


Out[32]:
<matplotlib.axes._subplots.AxesSubplot at 0x111a8be80>

Grafica Hexagonal

Muy util para la informacion bivariable, una alterntiva a la grafica de puntos:


In [33]:
df = pd.DataFrame(np.random.randn(1000, 2), columns=['a', 'b'])
df.plot.hexbin(x='a',y='b',gridsize=25,cmap='Oranges')


Out[33]:
<matplotlib.axes._subplots.AxesSubplot at 0x111de37f0>

Kernel Density Estimation (KDE)


In [34]:
df2['a'].plot.kde()


Out[34]:
<matplotlib.axes._subplots.AxesSubplot at 0x111dd4a58>

In [35]:
df2.plot.density()


Out[35]:
<matplotlib.axes._subplots.AxesSubplot at 0x113ac6d30>